Адміністрація вирішила продати даний сайт. За детальною інформацією звертайтесь за адресою: rozrahu@gmail.com

Лабораторна робота №3 АМО

Інформація про навчальний заклад

ВУЗ:
Національний університет Львівська політехніка
Інститут:
Не вказано
Факультет:
Не вказано
Кафедра:
Кафедра ЕОМ

Інформація про роботу

Рік:
2018
Тип роботи:
Лабораторна робота
Предмет:
Алгоритми та методи обчислень

Частина тексту файла

МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ “ЛЬВІВСЬКА ПОЛІТЕХНІКА” Кафедра ЕОМ / Лабораторна робота № 3 Використання потокового графу алгоритму для паралельних обчислень з дисципліни " AЛГОРИТМИ ТА МЕТОДИ ОБЧИСЛЕНЬ" Львів – 2018 1. МЕТА РОБОТИ Ознайомитися з використанням потокового графу алгоритму при паралельному програмуванні. ТЕОРЕТИЧНІ ВІДОМОСТІ 1.1. Паралельні обчислення. Паралельні обчислення — це форма обчислень, в яких кілька дій проводяться одночасно. Є кілька різних рівнів паралельних обчислень: бітовий, інструкцій, даних та паралелізм задач. Паралельні обчислення застосовуються вже протягом багатьох років, в основному в високопродуктивних обчисленнях, але зацікавлення ними зросло тільки недавно, через фізичні обмеження зростання частоти. Оскільки споживана потужність (і відповідно виділення тепла) комп'ютерами стало проблемою в останні роки, паралельне програмування стає домінуючою парадигмою в комп'ютерній архітектурі, в основному в формі багатоядерних процесорів. Паралельні комп'ютери системи можуть бути грубо класифіковані згідно з рівнем, на якому апаратне забезпечення підтримує паралелізм: багатоядерні процесори; багатопроцесорні комп'ютери — комп'ютери, що мають багато обчислювальних елементів в межах одної машини, також сюди відносимо кластери; MPP та GRID — системи що використовують багато комп'ютерів для роботи над одним завданням. Також Іноді, поряд з цими традиційними комп’ютерними системами, використовуються спеціалізовані паралельні архітектури для прискорення особливих задач. Програми для паралельних комп'ютерів писати значно складніше, ніж для послідовних, бо паралелізм додає кілька нових класів потенційних помилок, серед яких найпоширенішою є стан гонитви(конкуренції обчислювальних процесів). Комунікація, та синхронізація процесів зазвичай одна з найбільших перешкод для досягнення хорошої продуктивності паралельних звязків Код програми #include <stdio.h> #include <stdlib.h> #include <intrin.h> #include <math.h> #include <time.h> #define A 601 #define B 606 #define C 605 #pragma GCC push_options #pragma GCC optimize ("no-unroll-loops") #define REPEAT_COUNT 1000000 #define REPEATOR(count, code) \ for (unsigned int indexIteration = (count); indexIteration--;){ code; } #define TWO_VALUES_SELECTOR(variable, firstValue, secondValue) \ (variable) = indexIteration % 2 ? (firstValue) : (secondValue); double getCurrentTime(){ clock_t time = clock(); if (time != (clock_t)-1) { return ((double)time / (double)CLOCKS_PER_SEC); } return 0.; // else } #pragma GCC push_options #pragma GCC target ("no-sse2") //__attribute__((__target__("no-sse2"))) void run_native(double * const dArr){ double * const dAC = dArr; double * const dA = &dAC[0]; double * const dC = &dAC[1]; double * const dB = &dArr[2]; double * const dResult = &dArr[4]; double * const dX1 = &dResult[1]; double * const dX2 = &dResult[0]; REPEATOR(REPEAT_COUNT, TWO_VALUES_SELECTOR(*dA, 4., A); TWO_VALUES_SELECTOR(*dB, 3., B); TWO_VALUES_SELECTOR(*dC, 1., C); double vD = sqrt((*dB)*(*dB) - 4.*(*dA)*(*dC)); (*dX1) = (-(*dB) + vD) / (2.*(*dA)); (*dX2) = (-(*dB) - vD) / (2.*(*dA)); ) } #pragma GCC pop_options void run_SSE2(double * const dArr){ double * const dAC = dArr; double * const dA = &dAC[0]; double * const dC = &dAC[1]; double * const dB = &dArr[2]; double * const dResult = &dArr[4]; double * const dX1 = &dResult[1]; double * const dX2 = &dResult[0]; __m128d r__zero_zero, r__c_a, r__uORb_b, r__2cORbOR2a_2a, r__zero_bb, r__sqrtDiscriminant_zero, r_result; r__zero_zero = _mm_set_pd(0., 0.); // init REPEATOR(REPEAT_COUNT, TWO_VALUES_SELECTOR(*dA, 4., A); TWO_VALUES_SELECTOR(*dB, 3., B); TWO_VALUES_SELECTOR(*dC, 1., C); r__c_a = _mm_load_pd(dAC); // r__uORb_b = _mm_load_pd1(dB); r__uORb_b = _mm_load1_pd(dB); // b b r__uORb_b = _mm_unpacklo_pd(r__uORb_b, r__uORb_b); // (etap 1) r__2cORbOR2a_2a = _mm_add_pd(r__c_a, r...
Антиботан аватар за замовчуванням

28.05.2019 18:05

Коментарі

Ви не можете залишити коментар. Для цього, будь ласка, увійдіть або зареєструйтесь.

Завантаження файлу

Якщо Ви маєте на своєму комп'ютері файли, пов'язані з навчанням( розрахункові, лабораторні, практичні, контрольні роботи та інше...), і Вам не шкода ними поділитись - то скористайтесь формою для завантаження файлу, попередньо заархівувавши все в архів .rar або .zip розміром до 100мб, і до нього невдовзі отримають доступ студенти всієї України! Ви отримаєте грошову винагороду в кінці місяця, якщо станете одним з трьох переможців!
Стань активним учасником руху antibotan!
Поділись актуальною інформацією,
і отримай привілеї у користуванні архівом! Детальніше

Оголошення від адміністратора

Антиботан аватар за замовчуванням

пропонує роботу

Admin

26.02.2019 12:38

Привіт усім учасникам нашого порталу! Хороші новини - з‘явилась можливість кожному заробити на своїх знаннях та вміннях. Тепер Ви можете продавати свої роботи на сайті заробляючи кошти, рейтинг і довіру користувачів. Потрібно завантажити роботу, вказати ціну і додати один інформативний скріншот з деякими частинами виконаних завдань. Навіть одна якісна і всім необхідна робота може продатися сотні разів. «Головою заробляти» продуктивніше ніж руками! :-)

Новини